Skip to content

feat(logging): add structured request/response logging gated on WEBEX_DEBUG#16

Merged
adamweeks merged 1 commit into
mainfrom
claude/structured-logging-webex-wvUXU
May 27, 2026
Merged

feat(logging): add structured request/response logging gated on WEBEX_DEBUG#16
adamweeks merged 1 commit into
mainfrom
claude/structured-logging-webex-wvUXU

Conversation

@adamweeks

Copy link
Copy Markdown
Contributor

Adds a log_tool_call() decorator and setup_logging() to tools/common.py.
Every tool registration in main.py is now wrapped with the decorator so
that each invocation emits:

• DEBUG tool_request – tool name + entity ID kwargs (room_id, space_id, …)
• DEBUG tool_response – same fields + latency_ms + status=success
• WARNING tool_response – same fields + error_code + error_message on failure

When WEBEX_DEBUG=true the logger is forced to DEBUG so request/response
traces appear. Without it the logger honours LOG_LEVEL (default INFO),
suppressing the DEBUG lines while leaving WARNING errors visible.

LOG_FORMAT=json switches the handler to a single-line JSON formatter;
LOG_FORMAT=text (default) produces human-readable key=value output.

setup_logging() is idempotent (second call is a no-op), and functools.wraps
preserves the original function's name/doc/annotations so
FastMCP tool registration is unaffected.

Adds 18 unit tests covering setup_logging, _JsonFormatter, _kv, and
log_tool_call across success, error, and metadata-capture cases.

…_DEBUG

Adds a log_tool_call() decorator and setup_logging() to tools/common.py.
Every tool registration in main.py is now wrapped with the decorator so
that each invocation emits:

  • DEBUG tool_request  – tool name + entity ID kwargs (room_id, space_id, …)
  • DEBUG tool_response – same fields + latency_ms + status=success
  • WARNING tool_response – same fields + error_code + error_message on failure

When WEBEX_DEBUG=true the logger is forced to DEBUG so request/response
traces appear.  Without it the logger honours LOG_LEVEL (default INFO),
suppressing the DEBUG lines while leaving WARNING errors visible.

LOG_FORMAT=json switches the handler to a single-line JSON formatter;
LOG_FORMAT=text (default) produces human-readable key=value output.

setup_logging() is idempotent (second call is a no-op), and functools.wraps
preserves the original function's __name__/__doc__/__annotations__ so
FastMCP tool registration is unaffected.

Adds 18 unit tests covering setup_logging, _JsonFormatter, _kv, and
log_tool_call across success, error, and metadata-capture cases.
@adamweeks
adamweeks merged commit 4f157e5 into main May 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants